--如果数据库存在，再执行删库的语句
if exists (select * from sys.databases where name='Student')
begin
	drop database Student;
	print('删除成功')
end
	
-- 一. 创建数据库
create database Student;
go

-- 二.使用数据库
use Student;
go

-- 三.创建表
-- 1.创建班级信息表
create table Class(
ClassId int identity primary key, --班级编号，自增，主键
ClassName nvarchar(50) not null unique --班级名称,非空，唯一
);

-- 2.创建学生信息表
create table Student(
StudentId int identity primary key,--学号，自增，主键	
StudentName nvarchar(50) not null,--学生姓名
StudentSex tinyint default 3,--学生性别
StudentBirth date ,--学生出生日期
StudentAddress nvarchar(255) not null, --学生地址
ClassId int ,--学生所属班级的班级编号
foreign key(ClassId) references Class(ClassId)-- 班级编号为外键，参照班级信息表(Class)的班级编号(ClassID)字段
);




-- 3.创建课程表，存储课程信息，其中字段包含：课程id、课程名称、课程学分
create table Course(
	CourseId int identity(1,1) primary key,
	CourseName nvarchar(50),
	CourseCredit int
);
go

-- 创建班级课程表，存储班级课程信息，其中字段包含：自增id、班级id、课程id
create table ClassCourse(
	ClassCourseId int identity(1,1),
	ClassId int,
	CourseId int
);
go

-- 创建分数表，存储学生每个课程分数信息，其中字段包含：分数id、学生id、课程id、分数
create table Score(
	ScoreId int identity(1,1),
	StudentId int,
	CourseId int,
	Score int
);
go


--DDL:
--	create--创建
--	drop--删除
--	alter--修改

--DML:
--	insert--插入 
--	delete--删除数据
--  update--修改数据


--插入数据
/*
	insert into 表名(列名1,列名2,.....,) 
	values(值1,值2,......),(值1,值2,......),........
	列名和值：数量、数据类型、顺序一一对应
	列名的列表可以省略，所有字段（除了自增字段）都按顺序插入值时可以省略

*/

--eg:软件一班、软件二班、计算机应用技术班
insert into Class(ClassName) 
values('软件1班') ;
insert into Class(ClassName)
values('软件二班'),('计算机应用技术班');
select * from Class;
--学生信息插入
insert into Student
values('刘正',1,'2000-01-01','广西省桂林市七星区空明西路10号鸾东小区',1);

insert into Student(StudentName, StudentSex, StudentBirth, StudentAddress, ClassId)
values('黄贵',1,'2001-03-20','江西省南昌市青山湖区艾溪湖南路南150米广阳小区',1);

insert into Student(StudentName, StudentSex, StudentBirth, StudentAddress, ClassId)
values('陈美',2,'2000-07-08','福建省龙岩市新罗区曹溪街道万达小区',1);

insert into Student(StudentName, StudentSex, StudentBirth, StudentAddress, ClassId)
values('江文',1,'2000-08-10','安徽省合肥市庐阳区四里河路与潜山路交汇处万科城市之光',2);

insert into Student(StudentName, StudentSex, StudentBirth, StudentAddress, ClassId)
values('钟琪',2,'2001-03-21','湖南省长沙市雨花区红花坡社区',2);

insert into Student(StudentName, StudentSex, StudentBirth, StudentAddress, ClassId)
values('曾小林',1,'1999-12-10','安徽省合肥市庐阳区四里河路与潜山路交汇处万科城市之光',3);

insert into Student(StudentName, StudentSex, StudentBirth, StudentAddress, ClassId)
values('欧阳天天',2,'2000-04-05','湖北省武汉市洪山区友谊大道与二环线交汇处融侨悦府',3);

insert into Student(StudentName, StudentSex, StudentBirth, StudentAddress, ClassId)
values('徐长卿',1,'2001-01-30','江苏省苏州市苏州工业园区独墅湖社区',3);

insert into Student(StudentName, StudentSex, StudentBirth, StudentAddress, ClassId)
values('李逍遥',1,'1999-11-11','广东省广州市白云区金沙洲岛御洲三街恒大绿洲',3);

insert into Student(StudentName, StudentSex, StudentBirth, StudentAddress )
values('东方不败',3,'1999-12-11','河北省平定州西北四十余里的猩猩滩');

insert into Student(StudentName, StudentSex, StudentBirth, StudentAddress )
values('令狐冲',1,'2000-08-11','陕西省渭南市华阴市玉泉路南段');

--课程插入
insert into Course(CourseName,CourseCredit)
values('数据库高级应用',3);

insert into Course(CourseName,CourseCredit)
values('javascript编程基础',3);

insert into Course(CourseName,CourseCredit)
values('web前端程序设计基础',4);

insert into Course(CourseName,CourseCredit)
values('动态网页设计.net基础',6);

--班级课程插入
insert into ClassCourse(ClassId,CourseId)
values(1,1),(1,2),(1,3),(1,4);

insert into ClassCourse(ClassId,CourseId)
values(2,1),(2,2),(2,3),(2,4);

insert into ClassCourse(ClassId,CourseId)
values (3,1),(3,2),(3,3),(3,5);

--分数插入 Score
insert into Score(StudentId,CourseId,Score)
values(1,1,80),(1,2,78),(1,3,65),(1,4,90);

insert into Score(StudentId,CourseId,Score)
values (2,1,60),(2,2,77),(2,3,68),(2,4,88);

insert into Score(StudentId,CourseId,Score)
values (3,1,88),(3,2,45),(3,3,66),(3,4,75);

insert into Score(StudentId,CourseId,Score)
values (4,1,56),(4,2,80),(4,3,75),(4,4,66);

insert into Score(StudentId,CourseId,Score)
values (5,1,88),(5,2,79),(5,3,72),(5,4,85);

insert into Score(StudentId,CourseId,Score)
values (6,1,68),(6,2,88),(6,3,73),(6,4,63);

insert into Score(StudentId,CourseId,Score)
values (7,1,84),(7,2,90),(7,3,92),(7,4,78);

insert into Score(StudentId,CourseId,Score)
values (8,1,58),(8,2,59),(8,3,65),(8,4,75);

insert into Score(StudentId,CourseId,Score)
values (9,1,48),(9,2,67),(9,3,71),(9,4,56),(9,1,48);

--删除与修改
--分数表这边 李逍遥 数据库高级应用 成绩 插入重复了，请帮忙删除其中一条数据
--计算机应用技术班 的 欧阳天天 生日写错了，正确的生日应该是：2000-04-06，请用sql进行修改。
--计算机应用技术班 的 徐长卿 的 javascript编程基础 分数填错，正确的分数应该是：61，请用sql进行修改。


--1.分数表这边 李逍遥 数据库高级应用 成绩 插入重复了，请帮忙删除其中一条数据
delete from Score where ScoreId=37

--2. 计算机应用技术班 的 欧阳天天 生日写错了，正确的生日应该是：2000-04-06，请用sql进行修改。
update Student set StudentBirth='2000-04-06' where StudentBirth='2000-04-05'

--3.计算机应用技术班 的 徐长卿 的 javascript编程基础 分数填错，正确的分数应该是：61，请用sql进行修改。
update  Score set Score='61' where Score='59' and CourseId = 2;

--查询课程信息表
select * from Course;
--查询学生信息表
select * from Student;
--查询班级课程信息表
select *from ClassCourse
--查询分数信息表
select *from Score
--查询语法：
--select * from 表名 

--查询
--1.查询所有的班级 Class 信息.
select * from Class
--2.查询所有的学生 Student 信息。
select * from Student;
--3.查询所有的课程 Course 信息。
select *from ClassCourse
--4.查询所有的班级课程 ClassCourse 信息。
select *from ClassCourse
--5.查询所有的分数 Score 信息。
select *from Score
--6.只查询学生的姓名和地址信息。
select StudentName,StudentAddress from Student
--7.查询获取学生信息表中20%的学生信息。
select top 20 percent * from Student
--8.查询学生信息表中的班级编号有哪些（去除重复值)。
select distinct Classid from Class
--9. 查询分数表中有成绩的学生编号；
select  StudentId from Score
--10.查询所有的课程 Course 信息，并且按照学分从大到小排;
select * from Course order by  CourseCredit desc 
--11.查询所有的分数 Score 信息，并且按照分数从小到大排列。
select * from Score order by  Score asc
--12.查询所有的学生 Student 信息，并且按照年龄从小到大排列。
select * from Student order by StudentBirth desc
--13.查询软件一班所有的学生信息，显示学生id，姓名、性别、生日、住址。
select * from Student where ClassId=1
--14.查询所有的女生，显示学生id，姓名、性别、生日、住址。
select * from Student where StudentSex=2